/**
 * ListaTipos.java
 *  
 * Este código foi baseado no exemplo do site do ZK: http://www.zkoss.org/zkdemo/tree/dynamic_tree
 * 
 * Projeto: SGA-LEDS
 * 
 * Rodrigo Soares Maia
 * IFES - Instituto Federal do Espírito Santo - Campus Serra
 */

package controleInterno.cih;

import controleAtividades.cih.TreeNode;
import controleInterno.cci.CtrlInterno;
import controleInterno.cdp.TipoAtividade;
import java.util.ArrayList;
import java.util.List;

public class ListaTipos
{
    private TreeNode root;
    
    CtrlInterno ctrl = CtrlInterno.getInstance();
    
    //TODO mudar os comentarios...
    //recebe todas as atividades de um projeto para criar a arvore
    //para cada tipoAtividade que "eh raiz" sao criadas as arvores filhas
    public ListaTipos(List<TipoAtividade> listaAtividades) {
            ArrayList<TreeNode> nosAux = new ArrayList<>();
            
            for (TipoAtividade tipoAtividade : listaAtividades)
            {
                //se nao tiver pai
                if (tipoAtividade.getTipoPai() == null)
                {
                    nosAux.add(criaNo(tipoAtividade));
                }
            }
            
            TreeNode[] nos = new TreeNode[nosAux.size()];
            
            nos = nosAux.toArray(nos);
            
            root = new TreeNode(null, nos, true);
            
            //root = new TreeNode(null, new TreeNode(, nos, true), true);
        }
        
        public TreeNode criaNo(TipoAtividade t) {
            List<TipoAtividade> filhas = ctrl.obterFilhas(t);
            
            //se tem filhas
            if (filhas != null)
            {
                TreeNode[] nosDasFilhas = new TreeNode[filhas.size()];
                
                for (int i = 0; i < filhas.size(); i++)
                {
                    nosDasFilhas[i] = criaNo(filhas.get(i));
                }
                
                return new TreeNode(t, nosDasFilhas);
            }
            else
            {
                return new TreeNode(t);
            }
        }
        
	public TreeNode getRoot() {
		return root;
	}
}
